home *** CD-ROM | disk | FTP | other *** search
/ Aminet 2 / Aminet AMIGA CDROM (1994)(Walnut Creek)[Feb 1994][W.O. 44790-1].iso / Aminet / misc / amag / am9307b.lha / Tips & Tricks / S&W / S&W.c < prev    next >
C/C++ Source or Header  |  1993-05-26  |  3KB  |  86 lines

  1. /* S&W.c - von Christof Brühann
  2.  * Aufruf mit DICE: dcc S&W.c -o S&W */
  3. #include <time.h>
  4. #include <dos/dos.h>
  5. #define WINTERTIME 0
  6. #define SUMMERTIME 1
  7. #define DATAFILE "s:Sommer&Winter.dat"
  8. BOOL SummerTime(struct tm *tm) {
  9.  /* feststellen, ob die Zeit "tm" Sommerzeit ist */
  10.  int mon,mday,hour,wday;
  11.  mon =tm->tm_mon+1; /* tm-Struktur auslesen: Monat */
  12.  mday=tm->tm_mday;  /* Monatstag */
  13.  wday=tm->tm_wday;  /* Wochentag */
  14.  hour=tm->tm_hour;  /* Stunde */
  15.  if (mon==3 && mday-25>=wday) {
  16.    /* wenn März: schon Sommerzeit? */
  17.    /* Zeit prüfen wenn letzer Märzsonntag*/
  18.    if (wday==0 && hour<2) return(FALSE);
  19.    return(TRUE);
  20.  }
  21.  if (mon==9 && mday-24>=wday) {
  22.    /* wenn September: schon Winterzeit? */
  23.    if (wday==0 && hour<2) return (TRUE);
  24.    return(FALSE);
  25.  }
  26.  /* restlichen Monate prüfen */
  27.  if (mon>3 && mon<=9) return(TRUE);
  28.  return(FALSE);
  29. }
  30. int main()
  31. {
  32.  struct FileHandle *DataFile;
  33.  struct tm *tm;
  34.  time_t secs;
  35.  UBYTE time_now,time_before,string[255];
  36.  
  37.  if (DataFile=(struct FileHandle *)
  38.             Open(DATAFILE,MODE_READWRITE)) {
  39.   /* Datendatei öffnen */
  40.   time(&secs);              /* aktuelle Zeit */
  41.   tm=localtime(&secs);      /* besorgen */
  42.   time_now=WINTERTIME;
  43.   if (SummerTime(tm))
  44.     time_now=SUMMERTIME; /* Sommerzeit */
  45.   if (Read(DataFile,&time_before,1)) {
  46.     /* Datenfile lesen */
  47.     if (time_now==SUMMERTIME &&
  48.         time_before==WINTERTIME && tm->tm_mon!=8) {
  49.       /* Wechsel von Winter- nach Sommerzeit? */
  50.       secs+=3600; /* Zeit um eine Stunde erhöhen */
  51.       tm=localtime(&secs);
  52.       sprintf(string,"date %d:%d:%d",
  53.                 tm->tm_hour,tm->tm_min,tm->tm_sec);
  54.       if (Execute(string,0,0) &&
  55.           Execute("setclock save",0,0)) {
  56.         /* neue Zeit setzen */
  57.         puts("Beginn der Sommerzeit. Die Uhr wurde "
  58.              "um eine Stunde vorgestellt.");
  59.         if(Seek(DataFile,0,OFFSET_BEGINNING))
  60.            Write(DataFile,&time_now,1);
  61.       }
  62.     }
  63.     if(time_now==WINTERTIME &&
  64.        time_before==SUMMERTIME) {
  65.       /* Wechsel von Sommer- nach Winterzeit? */
  66.       secs-=3600; /* aktuelle Zeit zurückstellen */
  67.       tm=localtime(&secs);
  68.       sprintf(string,"date %d:%d:%d",tm->tm_hour,
  69.                             tm->tm_min,tm->tm_sec);
  70.       if (Execute(string,0,0) &&
  71.           Execute("setclock save",0,0)) {
  72.         puts("Beginn der Winterzeit. Die Uhr wurde "
  73.              "um eine Stunde zurückgestellt.");
  74.         if (Seek(DataFile,0,OFFSET_BEGINNING))
  75.         Write(DataFile,&time_now,1);
  76.       }
  77.     }
  78.   }
  79.   else
  80.     /* Datei existierte noch nicht */
  81.     Write(DataFile,&time_now,1);
  82.   Close(DataFile);
  83.  }
  84.  return(0);
  85. }
  86.